package com.firefly.utils.time;

import com.firefly.utils.VerifyUtils;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class SafeSimpleDateFormat {

    public static final SafeSimpleDateFormat defaultDateFormat = new SafeSimpleDateFormat();
    private ThreadLocal<SimpleDateFormat> threadLocal;

    public SafeSimpleDateFormat() {
        this("");
    }

    public SafeSimpleDateFormat(final SimpleDateFormat sdf) {
        if (sdf == null)
            throw new IllegalArgumentException("SimpleDateFormat argument is null");
        this.threadLocal = ThreadLocal.withInitial(() -> (SimpleDateFormat) sdf.clone());
    }

    public SafeSimpleDateFormat(String datePattern) {
        final String p = VerifyUtils.isEmpty(datePattern) ? "yyyy-MM-dd HH:mm:ss" : datePattern;
        this.threadLocal = ThreadLocal.withInitial(() -> new SimpleDateFormat(p));
    }

    public Date parse(String dateStr) {
        try {
            return getFormat().parse(dateStr);
        } catch (ParseException e) {
            return null;
        }
    }

    public String format(Date date) {
        return getFormat().format(date);
    }

    private DateFormat getFormat() {
        return threadLocal.get();
    }

}
